home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
misc
/
amag
/
am9311b.lha
/
Tips & Tricks
/
waitevent.asm
< prev
next >
Wrap
Assembly Source File
|
1992-03-03
|
3KB
|
73 lines
*******************************************************************
* Die Macros CALL und CALLI *
* *
*******************************************************************
CALL MACRO
IFEQ NARG-2
move.l \2Base,a6 ;kann an eigene Bedürfnisse
ELSE ;angepaßt werden.
move.l 4.w,a6
ENDIF
jsr _LVO\1(a6)
ENDM
CALLI MACRO
jsr _LVO\1(a6)
ENDM
*******************************************************************
* WaitEvent: Wartet auf Ereignisse am IDCMP und gibt CODE, *
* CLASS, MouseX, MouseY und IAddress zurück. *
* *
*******************************************************************
* Eingabe: a0 = UserPort *
* *
* Ausgabe: d0 = Code *
* d1 = Class *
* d3/d4 = MouseX/MouseY *
* a1 = IAddress *
*******************************************************************
WaitEvent movem.l d2/d5-d7/a0/a2-a6,-(sp) ;Register retten
move.l a0,a4 ;UPort nach a4
move.b MP_SIGBIT(a0),d1 ;Sig. Nr. nach d1
moveq #0,d0 ;d0 löschen
bset d1,d0 ;BitNr. in d0 setzen
CALL Wait ;und ab...
move.l a4,a0 ;UPort nach a0
CALLI GetMsg ;Msg holen
move.l d0,d5 ;Msg retten
beq.s .weg ;existiert Msg?
move.l d0,a1 ;Msg nach a1 (für ARI)
move.l im_Class(a1),-(sp) ;Klasse,
move im_Code(a1),-(sp) ;Code,
move im_MouseX(a1),-(sp) ;MausX,
move im_MouseY(a1),-(sp) ;MausY,
move.l im_IAddress(a1),-(sp) ;Adr in den Stapel
.loop move.l a4,a0 ;UPort nach a0
CALLI GetMsg ;Msg holen
tst.l d0 ;existiert eine?
beq.s .weiter ;nö -> Weiter geht es
move.l d0,a1 ;Msg nach a1
CALLI ReplyMsg ;Msg beantworten
bra.s .loop ;--> zur Schleife
.weiter move.l d5,a1 ;Msg nach a1
CALLI ReplyMsg ;beantworten
move.l (sp)+,a1 ;IAddress -> a1
move (sp)+,d4 ;MouseY -> d4
move (sp)+,d3 ;MouseX -> d3
move (sp)+,d0 ;Code -> d0
move.l (sp)+,d1 ;Class -> d1
.weg movem.l (sp)+,d2/d5-d7/a0/a2-a6 ;Register in Urzustand
rts ;...und weg!